package com.bangcommunity.bbframe.orm;

import com.bangcommunity.bbframe.common.base.IEntity;
import com.bangcommunity.bbframe.mybatis.criteria.AbstractorCriteria;
import com.bangcommunity.bbframe.mybatis.manager.IBaseManager;

import java.io.Serializable;
import java.util.List;

/**
 * @author tanghc
 * @date 18/1/3
 */
public interface IBaseManagerWithCache<PK extends Serializable, E extends IEntity<PK>, C extends AbstractorCriteria>
        extends IBaseManager<PK, E, C> {
    /**
     * 设置基本对象缓存
     * 
     * @param e
     */
    void putBaseCache(E e);

    /**
     * 删除基本对象缓存
     * 
     * @param e
     */
    void delBaseCache(E e);

    /**
     * 批量删除基本对象缓存,根据主键
     * 
     * @param pk
     */
    void delBaseCache(PK pk);

    /**
     * 批量设置基本对象缓存
     * 
     * @param es
     */
    void batchPutBaseCache(List<E> es);

    /**
     * 批量删除基本对象缓存
     * 
     * @param es
     */
    void batchDelBaseCache(List<? extends E> es);

    /**
     * 批量删除基本对象缓存
     * 
     * @param pks
     */
    void batchDelBaseCacheByPks(List<? extends PK> pks);

    /**
     * 根据主键生成基本对象的缓存key值
     */
    String getCacheKey(PK pk);

    /**
     * 根据对象生成基本对象的缓存key值
     */
    String getCacheKey(E record);
}
